package dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import NegocioVO.EmpleadoVO;
import bean.DepositoBean;
import bean.ItemDepositoBean;
import bean.ItemOrdenCompraBean;
import bean.ProductoBean;



import hbt.HibernateDAO;

public class DepositoDao {
	
	public void altaDeposito(DepositoBean DB)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		s.save(DB);
		t.commit();
	}

	public static DepositoBean getDepositoByEncargado(EmpleadoVO encargado)
	{
		try
		{
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			System.out.println("EmpleadoId "+encargado.getIdEmpleado());
			DepositoBean p=(DepositoBean)s.createQuery("SELECT d FROM DepositoBean d LEFT OUTER JOIN d.productos AS productos WHERE d.encargado.idEmpleado=:id_encargado").setParameter("id_encargado",encargado.getIdEmpleado()).uniqueResult();
			System.out.println("Deposito==null "+(p==null));
			@SuppressWarnings("unchecked")
			List<ItemDepositoBean> lp=(List<ItemDepositoBean>)s.createQuery("SELECT d.productos FROM DepositoBean d LEFT OUTER JOIN d.productos AS productos WHERE d.encargado.idEmpleado=:id_encargado").setParameter("id_encargado",encargado.getIdEmpleado()).uniqueResult();
			if(lp==null)lp=new ArrayList<ItemDepositoBean>();
			p.setProductos(lp);
			
			
			t.commit();
			System.out.println("Termina con deposito");
			return p;
		}
		catch(Exception e)
		{
			e.printStackTrace();
			return null;
		}
		
	}
	
	public static void actualizarStock(DepositoBean deposito,ItemOrdenCompraBean item)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		
		List<ItemDepositoBean> stock=deposito.getProductos();
		boolean existia=false;
		for(int i=0;i<stock.size();i++)
		{
			if(stock.get(i).getProducto().getIdProducto()==item.getProducto().getIdProducto())
			{
				stock.get(i).setCantidad(stock.get(i).getCantidad()+item.getCantidad());
				existia=true;
				break;
			}
		}
		if(!existia)
		{
			ItemDepositoBean itemNew=new ItemDepositoBean();
			itemNew.setCantidad(item.getCantidad());
			itemNew.setProducto(item.getProducto());
			s.save(itemNew);
			deposito.getProductos().add(itemNew);
		}
		s.update(deposito);
		t.commit();
		
	}
	
}
